package event.numberevent;

import java.util.EventListener;

/**questa interfaccia e' la classe base per ascoltare gli eventi di un particolare ListenedNumber. L'interfaccia non
 * ha metodi propri e <strong>non deve</strong> essere implementata dai vari programmi. Piuttosto essa è la radice
 * di altre sottointerfacce che vogliono intercettare particolari cambiamenti di stato del numero ListenedNumber.
 * Per esempio io voglio ricevere da un particolare ListenedNumber un evento solo quando lo stato del numero e' compreso
 * tra 2 e 5. Non implemento nel programma base questa interfaccia ma devo creare un interfaccia figlia di NumberListener.
 * L'interfaccia figlia poi dovrà specificare i metodi per i quali voglio che una classe ascoltatrice sia sensibile.
 * I metodi in sé non contengono l'informazione dell'intervallo per cui tale metodo funziona, ma tale informazione
 * può essere aggiunta al metodo particolare tramite <strong>l'annotazione Range</strong>; usando tale annotazione
 * si fa in modo che il metodo venga lanciato in caso in cui lo stato sia compreso nell'intervallo specificato
 * dal range stesso. L'interfaccia figlia può comunque avere metodi da implementare che non sono annotati
 * con range: questi metodi verranno ignorati dal gestore dello stato ma potranno comunque essere usati nelle
 * classi implementanti l'interfaccia figlia di NumberListener.
 * <p>Una limitazione riguardo questa classe è che i prototipi dei metodi da implementare non possono essere di qualunque
 * tipo ma <strong>devono ritornare void e l'unico parametro in ingresso può essere solo un NumberEvent</strong>
 * <p>Un esempio riguardo all'esempio dell ostato tra 2 e 5 potrebbe essere:
 * <p>public interface State25Listener extends NumberListener<Integer>{
 * <p> @Range(inf=2,sup=5)
 * <p> public void state25Happened(NumberEvent<Integer> arg0);
 * <p> }
 * 
 * @author koldar
 * @version 1.1
 * @see ListenedNumber
 * @see NumberEvent
 *
 * @param <NUMBER> indica la classe numero in cui il ListenedNumber opera
 */
public interface NumberListener<NUMBER extends Number> extends EventListener{
}
